Como realizar operaciones CRUD (Create, Read, Update, Delete) sobre una base de datos con Spring
Para hacer uso del Spring JPA primero necesitamos indicar las dependencias en el pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
En este caso usaremos una base de datos H2 asi que indicamos la siguiente dependencia:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
En el archivo application.properties indicamos la siguiente configuracion para conectarnos a nuestra base de datos:
spring.datasource.url=jdbc:h2:~/personas.db
spring.datasource.driverClassName=org.h2.Driver
Para realizar la implementacion del acceso a una base de datos primero necesitamos crear un modelo de datos, que sera el equivalente a una tabla dentro de la base de datos con todos sus campos, para ello creamos una clase personas y aƱadimos los atributos que seran los campos que tendra en la base de datos, ademas debemos de incluir los getters y setters, un ejemplo seria el siguiente (archivo Persona.java):
package com.example.ApiRestExample;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Column;
import javax.persistence.Table;
@Entity
@Table(name="PEOPLE")
public class Persona {
@Id
private Integer id;
@Column(name="NAME")
private String name;
@Column(name="AGE")
private Integer age;
@Column(name="EYE_COLOR")
private String eyeColor;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEyeColor() {
return eyeColor;
}
public void setEyeColor(String eyeColor) {
this.eyeColor = eyeColor;
}
}
A continuacion necesitamos definir la interfaz del repositorio (archivo repositorio.java):
package com.example.ApiRestExample;
import org.springframework.data.repository.CrudRepository;
public interface Repositorio extends CrudRepository<Persona, Integer> {
}
A continuacion en el controlador incluimos el siguiente codigo:
@Autowired
Repositorio repositorio;
@GetMapping("/getDBInfo")
public String getDB(){
Iterable<Persona> datos;
String contenido = "";
datos = repositorio.findAll();
for(Persona i : datos){
contenido += i.getName() + ", ";
}
return contenido;
}
Si revisamos el codigo lo primero que vemos es el Autowired esta anotacion permite realizar la carga de la clase del repositorio sin la necesidad de utilizar un constructor
Otro punto a tener en cuenta en el codigo es la llamada a findAll(), por defecto hay una serie de llamas que ya estan definidas en el repositorio, findAll es una de ellas, en este caso nos devuelve un objeto Iterable<Persona>, en este codigo simplemente cogemos el nombre de cada objeto y lo metemos en un string para devolverlo en la respuesta.
Spring nos permite utilizar una serie de funciones cuya funcionalidad depende del propio nombre de la funcion, Informacion consultas avanzadas>
Para guardar informacion en la base de datos utilizamos la funcion save(), una vez ya tenemos establecido el modelo y el repositorio guardar informacion en la base de datos es muy simple:
@PostMapping("/postDBInfo")
public Persona postDBInfo(@RequestBody Persona persona){
return repositorio.save(persona);
}
En este caso recibimos la informacion del objeto persona desde la solicitud y el propio spring la mapea dentro del objeto, despues solo tenemos que llamar a la funcion save() y spring realiza el guardado en la base de datos.
En el postman la solicitud seria:
Spring | Acceso a repositorio | Base de datos